﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

//Si vous déclarez dans une classe dérivée une méthode ayant la même signature qu'une méthode dynamique de la classe ancêtre, 
//la nouvelle méthode redéfinit la méthode héritée dans la classe dérivée, l'utilisation du mot clef override est obligatoire
namespace MethodeVirtual
{    
    class Vehicule
    {
        protected int nbr_passager = 0;
        public Vehicule()
        {
            Console.WriteLine("(constructeur Vehicule) Nombre de passagers = " + nbr_passager);
        }

        public Vehicule(int nbPassage)
        {
            nbr_passager = nbPassage;
            Console.WriteLine("(constructeur Vehicule) Nombre de passagers initialisé= " + nbr_passager);
        }

        public virtual void Passager(int nb) // méthode virtuelle redéfinissable
        {
            nbr_passager = nb;
            Console.WriteLine("(Vehicule) Nombre de passagers = " + nbr_passager);
        }
    }

    class Terrestre : Vehicule
    {
        public Terrestre() { }
     //   public Terrestre(int newVar) : base(newVar) { nbr_passager = newVar; }
        public override void Passager(int nb) // redéfinit la méthode virtuelle de classe Vehicule
        {
           nbr_passager = nb + 1;
            Console.WriteLine("(Terrestre ) Nombre de passagers =  .. " + nbr_passager);
        }
    }

    class Voiture : Terrestre
    {
        public override void Passager(int nb) // redéfinit la méthode virtuelle de classe Terrestre
        {
            nbr_passager = nb + 2;
            Console.WriteLine("(Voiture ) Nombre de passagers = .. " + nbr_passager);
        }
    }

    class Exercice
    {
        public static void Main(string[] args) // méthode principale de lancement de l'exécution
        {
            Vehicule mercedes;

            mercedes = new Vehicule();
            mercedes.Passager(3); // méthode Passager de la classe Vehicule  qui est utilisée

            mercedes = new Terrestre();
            mercedes.Passager(3);// méthode Passager de la classe Terrestre qui est utilisée

            mercedes = new Voiture();
            mercedes.Passager(3);// méthode Passager de la classe Voiture qui est utilisée

            Console.ReadLine();
        }
    }
}
